var DeltaList = function(array){

	var dValues = [];
	
	var init = function(array){
		array.sort(function(A,B){
			if(A<B) return -1;
			return 1;
		});
		if(array.length > 0) dValues.push(array[0]);
		for(var i = 1; i < array.length; i++){
			dValues.push(array[i] - array[i-1]);
		}
	};
	
	this.getValues = function(){
		var values = [];
		if(dValues.length > 0) values.push(dValues[0]);
		for(var i = 1; i < dValues.length; i++){
			values.push(values[i-1] + dValues[i]);
		}
		return values;
	};
	
	this.and = function(dList){
		var R = [];
		var A = this.getValues();
		var B = dList.getValues();
		for(var i in A){
			for(var j in B){
				if(A[i] == B[j]) R.push(A[i]);
			}
		}
		return new DeltaList(R);
	};
	
	this.or = function(dList)
	{ //TODO: fix or function
		var R = [];
		var A = this.getValues();
		var B = dList.getValues();
		R = A.concat(B);
		R.sort(function(A, B){
			if(A-0 < B-0) return -1;
			return 1;
		});
		for(var i=1;i<=R.length-1;i++)
		{
			while(R[i-1]==R[i])
			{
				R.splice(i,1);
			}
		}
		return new DeltaList(R);
	}
	
	this.print = function(){
		return dValues;
	};
	
	init(array || []);

};